package model

import (
	"blog/utils"
	"fmt"
	"time"

	"gorm.io/driver/mysql"

	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

// DB 全局变量，当需要数据库时可以直接调用
var db *gorm.DB
var err error

func InitDb() {
	// dns:root:123456@tcp(localhost:3306)/vote?charset=utf8mb4&parseTime=True&loc=Local
	dns := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		utils.Config.DbUser,
		utils.Config.DbPassword,
		utils.Config.DbHost,
		utils.Config.DbPort,
		utils.Config.DbName,
	)
	db, err = gorm.Open(mysql.Open(dns), &gorm.Config{
		// gorm日志模式 silent
		Logger: logger.Default.LogMode(logger.Silent),
	})
	if err != nil {
		fmt.Println("连接数据库失败，请检查参数：", err)
	}
	sqlDB, _ := db.DB()
	// SetMaxIdleCons 设置连接池中的最大闲置连接数。
	sqlDB.SetMaxIdleConns(10)

	// SetMaxOpenCons 设置数据库的最大连接数量。
	sqlDB.SetMaxOpenConns(100)

	// SetConnMaxLifetiment 设置连接的最大可复用时间。
	sqlDB.SetConnMaxLifetime(10 * time.Second)
	// 迁移数据表，在没有数据表结构变更时候，建议注释不执行
	// fmt.Println("xxxxxxxxxxxxxxxxxxxxxxxx start")
	// db.AutoMigrate(&User{})
	// fmt.Println("xxxxxxxxxxxxxxxxxxxxxxxx end")
	// _ = db.AutoMigrate(&Board{}, &ArtComment{}, &LifeComment{}, &Life{})
}
